using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools
{
    /// <summary>
    /// <para>Store Diagram</para>
    /// <para>Stores a temporary network diagram in the database. Access rights and tags can be assigned to control security and searchability of the diagram.</para>
    /// <para>在数据库中存储临时网络逻辑示意图。可以分配访问权限和标签来控制图表的安全性和可搜索性。</para>
    /// </summary>    
    [DisplayName("Store Diagram")]
    public class StoreDiagram : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public StoreDiagram()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_network_diagram_layer">
        /// <para>Input Network Diagram Layer</para>
        /// <para>The temporary network diagram layer to be stored.</para>
        /// <para>要存储的临时网络逻辑示意图图层。</para>
        /// </param>
        /// <param name="_out_name">
        /// <para>Network Diagram Name</para>
        /// <para>The name of the output network diagram.</para>
        /// <para>输出网络逻辑示意图的名称。</para>
        /// </param>
        public StoreDiagram(object _in_network_diagram_layer, object _out_name)
        {
            this._in_network_diagram_layer = _in_network_diagram_layer;
            this._out_name = _out_name;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Store Diagram";

        public override string CallName => "nd.StoreDiagram";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_network_diagram_layer, _out_name, _access_right_type.GetGPValue(), _tags];

        /// <summary>
        /// <para>Input Network Diagram Layer</para>
        /// <para>The temporary network diagram layer to be stored.</para>
        /// <para>要存储的临时网络逻辑示意图图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network Diagram Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_network_diagram_layer { get; set; }


        /// <summary>
        /// <para>Network Diagram Name</para>
        /// <para>The name of the output network diagram.</para>
        /// <para>输出网络逻辑示意图的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Diagram Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_name { get; set; }


        /// <summary>
        /// <para>Network Diagram Access Rights</para>
        /// <para><xdoc>
        ///   <para>Specifies the access right level of the input diagram.</para>
        ///   <bulletList>
        ///     <bullet_item>Public—Other users will have full access to the diagram; everyone can see, edit, update, and overwrite the diagram. However, no one except the diagram owner and the portal utility network owner—in the case of diagrams related to a utility network in an enterprise geodatabase—can use the Alter Diagram Properties tool to change the access right level. This is the default.</bullet_item><para/>
        ///     <bullet_item>Protected—Other users will have read-only access to the diagram. They cannot edit, update, or overwrite the diagram.</bullet_item><para/>
        ///     <bullet_item>Private— Other users will not have access to the diagram. The corresponding diagram item will be hidden from other users in the Find Diagrams pane.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输入关系图的访问权限级别。</para>
        ///   <bulletList>
        ///     <bullet_item>公共 - 其他用户将具有对逻辑示意图的完全访问权限;每个人都可以查看、编辑、更新和覆盖图表。但是，除了逻辑示意图所有者和门户公共设施网络所有者（对于与企业级地理数据库中的公共设施网络相关的逻辑示意图）之外，任何人都不能使用更改逻辑示意图属性工具来更改访问权限级别。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>受保护 - 其他用户将具有对逻辑示意图的只读访问权限。他们无法编辑、更新或覆盖图表。</bullet_item><para/>
        ///     <bullet_item>私有 — 其他用户将无权访问逻辑示意图。相应的逻辑示意图项将在“查找逻辑示意图”窗格中对其他用户隐藏。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Diagram Access Rights")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _access_right_type_value _access_right_type { get; set; } = _access_right_type_value._PUBLIC;

        public enum _access_right_type_value
        {
            /// <summary>
            /// <para>Public</para>
            /// <para>Public—Other users will have full access to the diagram; everyone can see, edit, update, and overwrite the diagram. However, no one except the diagram owner and the portal utility network owner—in the case of diagrams related to a utility network in an enterprise geodatabase—can use the Alter Diagram Properties tool to change the access right level. This is the default.</para>
            /// <para>公共 - 其他用户将具有对逻辑示意图的完全访问权限;每个人都可以查看、编辑、更新和覆盖图表。但是，除了逻辑示意图所有者和门户公共设施网络所有者（对于与企业级地理数据库中的公共设施网络相关的逻辑示意图）之外，任何人都不能使用更改逻辑示意图属性工具来更改访问权限级别。这是默认设置。</para>
            /// </summary>
            [Description("Public")]
            [GPEnumValue("PUBLIC")]
            _PUBLIC,

            /// <summary>
            /// <para>Protected</para>
            /// <para>Protected—Other users will have read-only access to the diagram. They cannot edit, update, or overwrite the diagram.</para>
            /// <para>受保护 - 其他用户将具有对逻辑示意图的只读访问权限。他们无法编辑、更新或覆盖图表。</para>
            /// </summary>
            [Description("Protected")]
            [GPEnumValue("PROTECTED")]
            _PROTECTED,

            /// <summary>
            /// <para>Private</para>
            /// <para>Private— Other users will not have access to the diagram. The corresponding diagram item will be hidden from other users in the Find Diagrams pane.</para>
            /// <para>私有 — 其他用户将无权访问逻辑示意图。相应的逻辑示意图项将在“查找逻辑示意图”窗格中对其他用户隐藏。</para>
            /// </summary>
            [Description("Private")]
            [GPEnumValue("PRIVATE")]
            _PRIVATE,

        }

        /// <summary>
        /// <para>Tags (optional)</para>
        /// <para><xdoc>
        ///   <para>Tags help with querying the stored diagram using the Find Diagrams pane.</para>
        ///   <para>Use the # character to separate each tag and aid in efficient diagram searches.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>标签有助于使用“查找逻辑示意图”窗格查询存储的逻辑示意图。</para>
        ///   <para>使用 # 字符分隔每个标签，并有助于进行有效的图表搜索。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tags (optional)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _tags { get; set; } = null;


        public StoreDiagram SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}